#include<iostream>
#include<signal.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>

using namespace std;

// void handler(int signo)
// {
//     //父进程在接收到17号信号后，在自定义函数信号捕捉里进行子进程的处理工作
//     cout<<"i get signo: "<<signo<<endl;
//     int status=0;
//     int rid=waitpid(-1,&status,0);
//     if(rid<0)
//     {
//         perror("waitpid");
//         exit(1);
//     }
//     cout<<"recovery child success"<<endl;
//     cout<<"child exit code: "<<((status>>8)&0xFF)<<" exit signo: "<<(status&0x7F)<<endl;
// }
int main()
{
    signal(17,SIG_IGN);
    pid_t id=fork();
    if(id<0)
    {
        perror("fork");
        exit(1);
    }
    else if(id==0)
    {
        //child
        int cnt=0;
        while(true)
        {
            cout<<"i am child pid: "<<getpid()<<" ppid: "<<getppid()<<endl;
            cnt++;
            if(cnt==5) 
            {
                cout<<"child quit"<<endl;
                exit(2);
            }
            sleep(1);
        }
    }

    //father 父进程自己干自己的事，当收到子进程退出信号后，就处理子进程
    while(true)
    {
        cout<<"i am father pid: "<<getpid()<<endl;
        sleep(1);
    }
    return 0;
}